#pragma once

#include <string>

#include <boost/enable_shared_from_this.hpp>

#include <uv.h>

namespace anb { namespace net {

// libuv object

class uvo : public boost::enable_shared_from_this<uvo> {
public:
    enum type {
        uvo_loop,

        uvo_server,
        uvo_client,

        uvo_connection,
    };

    uvo(const std::string& alias, type type);
    virtual ~uvo();

	typedef boost::shared_ptr<uvo> ptr;

    const std::string& get_alias() const;
	void set_alias(const std::string& alias);

    type get_type();

    virtual void stop();

    bool is_stop();

protected:
    void log(const std::string& s);
    void log_error(int err, const std::string& s);

private:
    std::string m_alias;
    type m_type;
    bool m_stop;
};

} }
